<?php

class Usuarios_AjaxController extends Zend_Controller_Action {

    protected $_adjuntoDao;

    public function init() {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }

        $this->view->colorSucursal = $this->view->usuario->getSucursal()->getColor();

        $this->_helper->layout()->setLayout("layout_admin");
        $this->_flashMessenger = $this->_helper->getHelper('Mensaje');

        $this->_adjuntoDao = new Doctrine_Model_AdjuntoDoctrineDao();
        $this->referenciaDao = new Doctrine_Model_Referencias();
        $this->informeDao = new Doctrine_Model_InformeDoctrineDao();
        $this->personaDao = new Doctrine_Model_PersonaDoctrineDao();

        $this->personaDao = new Doctrine_Model_PersonaDao();
        $this->promesasDao = new Doctrine_Model_PromesasDao();
    }

    public function agregardatolaboralAction() {
        $this->_helper->layout->disableLayout();

        $this->view->tiposLaborales = $this->referenciaDao->obternerTiposLaborales();
        $this->view->localidades = $this->referenciaDao->obternerLocalidades();
        $this->view->tiposDeTelefonos = $this->referenciaDao->obternerTiposDeTelefonos();

        $indice = $this->getRequest()->getParam("indice");
        $this->view->indice = $indice + 1;
    }

    public function formularioinformecolorboxAction() {
        $this->_helper->layout()->setLayout("layout_pagos");

        $persona_id = $this->getRequest()->getParam("persona_id", 0);

        $this->view->persona_id = $persona_id;
        $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();

        if ($this->_hasParam("error")) {
            $this->view->error = $this->getRequest()->getParam("error", null);
            $this->view->mensaje = $this->getRequest()->getParam("mensaje", null);
        }
    }

    public function guardarinformejsonAction() {
        $this->_helper->layout->disableLayout();

        $mensaje = "";
        $persona_id = $this->getRequest()->getParam("persona_id");
        $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id");
        $comentario = $this->getRequest()->getParam("comentario");

        if ($this->getRequest()->isPost()) {
            $informe = new Doctrine_Model_Entities_Informe();
            if ($persona_id) {
                $persona = $this->personaDao->obtenerPorId($persona_id);
            }
            if ($tipo_informe_id) {
                $tipoInforme = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoInforme', $tipo_informe_id);
            }
            $informe->setPersona($persona);
            $informe->setTipoInforme($tipoInforme);
            $informe->setComentario($comentario);
            $informe->setFecha(new \DateTime());

            if ($this->informeDao->guardar($informe)) {
                $mensaje = " Informe guardado con exito.";
                $error = false;
            } else {
                $mensaje = "Error al intentar guardar el informe.";
                $error = true;
            }
        }
        $this->_helper->redirector('formularioinformecolorbox', 'ajax', 'usuarios', array("error" => $error, "mensaje" => $mensaje, "persona_id" => $persona_id));
    }

    public function obtenerinformesjsonAction() {

        $this->_helper->layout->disableLayout();

        $persona_id = $this->getRequest()->getParam("persona_id", 0);
        $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id", 0);

        if ($tipo_informe_id > 0) {
            $informes = $this->informeDao->obtenerTodosPorPersonaYTipo($persona_id, $tipo_informe_id);
            $tipoInforme = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoInforme', $tipo_informe_id);
            $this->view->tituloInforme = $tipoInforme->getDescripcion();
        } else {
            $informes = $this->informeDao->obtenerTodosPorPersona($persona_id);
            $this->view->tituloInforme = "Todos";
        }

        $this->view->informes = $informes;
    }

    public function obteneradjuntosAction() {

        $this->_helper->layout->disableLayout();

        $adjuntos = array();
        $persona_id = $this->getRequest()->getParam("persona_id", 0);
        $tipo_adjunto_id = $this->getRequest()->getParam("tipo_adjunto_id", 0);

        if ($tipo_adjunto_id > 0) {
            $adjuntos = $this->_adjuntoDao->obtenerTodosPorPersonaYTipo($persona_id, $tipo_adjunto_id);
            $tipoAdjunto = $this->_adjuntoDao->obtenerPorId('Doctrine_Model_Entities_TipoAdjunto', $tipo_adjunto_id);
            $this->view->tituloTipoAdjunto = $tipoAdjunto->getDescripcion();
        } else {
            $adjuntos = $this->_adjuntoDao->obtenerTodosPorPersona($persona_id);
            $this->view->tituloTipoAdjunto = "Todos";
        }

        $this->view->adjuntos = array_reverse($adjuntos);
    }

    public function obtenerinformeclienteAction() {
        $this->_helper->layout->disableLayout();

        $tipoInformeId = $this->getRequest()->getParam("tipo_informe_id");
        $this->view->tipoInformeId = $tipoInformeId;
        switch ($tipoInformeId) {
            case 1:

                $this->view->tituloInforme = "Informes sobre el Veraz";
                break;
            case 2:

                $this->view->tituloInforme = "Informes sobre el PPE";
                break;
            case 3:

                $this->view->tituloInforme = "Informes sobre el AAR";
                break;

            default:
                break;
        }
    }

    public function listadopromesasAction() {
        $this->_helper->layout->disableLayout();
        header('Content-Type: text/html; charset=ISO-8859-1');

        if ($this->_hasParam("cliente_id")) :
            $id = $this->getRequest()->getParam("cliente_id");
            $unaPersona = new Doctrine_Model_Entities_Persona();
            $unaPersona = $this->personaDao->obtenerPorId($id);

            $conjPromesas = new Doctrine\Common\Collections\ArrayCollection();
            $conjPromesas = $unaPersona->getPromesasNoPendientes();
            $conjPromesasPendientes = $unaPersona->getPromesasPendientes();

            $this->view->cliente = $unaPersona;

            $this->view->conjPromesas = array_reverse($conjPromesas->toArray());
            $this->view->conjPromesasPendientes = $conjPromesasPendientes;

        endif;
    }

    public function listadoinformesAction() {
        $this->_helper->layout->disableLayout();
        header('Content-Type: text/html; charset=ISO-8859-1');

        if ($this->_hasParam("cliente_id")) :
            $id = $this->getRequest()->getParam("cliente_id");
            $unaPersona = new Doctrine_Model_Entities_Persona();
            $unaPersona = $this->personaDao->obtenerPorId($id);

            $conjInformes = new Doctrine\Common\Collections\ArrayCollection();

            $tipo = (int) $this->getRequest()->getParam("tipo_informe_id", 0);
            if ($tipo > 0) {
                $conjInformes = $this->informeDao->obtenerTodosPorPersonaYTipo($id, $tipo);
            } else {
                $conjInformes = $this->informeDao->obtenerTodosPorPersona($id);
            }

            $this->view->cliente = $unaPersona;
            $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();
            $this->view->conjInformes = array_reverse($conjInformes);
            $this->view->tipo_informe_id = $tipo;

        endif;
    }

    public function nuevapromesaAction() {
        $this->_helper->layout()->setLayout("layout_pagos");
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/jquery.maskedinput-1.3.min.js');

        $this->view->cliente_id = $this->getRequest()->getParam("cliente_id");
        $fecha_actual = new DateTime();
        $this->view->fecha_actual = $fecha_actual->format("d/m/Y");

        $unaPersona = new Doctrine_Model_Entities_Persona();
        $unaPersona = $this->personaDao->obtenerPorId($this->view->cliente_id);

        $this->view->creditos = $unaPersona->obtenerCreditosActivos();
    }

    public function guardarpromesaAction() {

        $this->_helper->layout()->setLayout("layout_pagos");
        if ($this->getRequest()->isPost()) :
            $promesaDao = new Doctrine_Model_PromesasDao();
            $promesa = new Doctrine_Model_Entities_Promesas();

            $unCliente = $this->personaDao->obtenerPorId($this->getRequest()->getParam("cliente_id"));
            $credito_id = $this->getRequest()->getParam("credito_id", null);
            $promesa->setPersona($unCliente);
            $fecha_promesa = str_replace("/", "-", $this->getRequest()->getParam("fecha_promesa"));
            $verificacionLaboral = $this->getRequest()->getParam("fecha_verif_laboral", null);
            $fecha_promesa = str_replace("/", "-", $this->getRequest()->getParam("fecha_promesa"));
            $cantidadDeDiasPromesa = $this->getRequest()->getParam("dias_de_promesa", 0);

            if ($fecha_promesa) {
                $fecha_promesa = new Datetime($fecha_promesa, new DateTimeZone('UTC'));
                $promesa->setFechaPromesa($fecha_promesa);
            }


            $promesa->setFecha(new DateTime());
            $promesa->setCredito_id($credito_id);

            $promesa->setComentario($this->getRequest()->getParam("comentario"));
            $promesa->setUsuario($this->view->usuario);
            if ($verificacionLaboral) {
                $promesa->setAutomatico(1);
                $fechaActual = new DateTime();
                $fechaVerificacionLaboral = $fechaActual->add(new DateInterval('P' . $cantidadDeDiasPromesa . 'D'));
                $promesa->setFechaVerificacionLaboral($fechaVerificacionLaboral);
                $promesa->setPendiente(1);
            }


            if ($promesaDao->guardar($promesa)) :
                $this->view->error = false;
                $this->view->mensaje = "Guardado";
                $this->view->script = "parent.$.fn.colorbox.close();";
            else:
                $this->view->error = true;
                $this->view->mensaje = $verificacionLaboral . "No se ha podido guardad la promesa.";
            endif;

        //$this->_forward("nuevapromesa", "ajax", "usuarios", array("mensaje" => $cccc));

        endif;

        $this->render("nuevapromesa");
    }

    public function agregarinformeAction() {
        $this->_helper->layout->disableLayout();

        if ($this->getRequest()->isPost()) {

            $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id", 0);
            $tipoInforme = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoInforme", $tipo_informe_id);
            $this->view->tipo_informe = $tipoInforme;

            $this->view->comentario = $this->getRequest()->getParam("comentario", 0);

            $this->view->fecha = new DateTime();
        }
    }

    public function agregarinformecreditoAction() {
        $this->_helper->layout->disableLayout();

        $tipo_persona = $this->getRequest()->getParam("tipo_persona", 0);
        $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id", 0);
        $tipoInforme = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoInforme", $tipo_informe_id);
        $comentario = $this->getRequest()->getParam("comentario", 0);

        $this->view->tipo_informe = $tipoInforme;
        $this->view->comentario = $comentario;
        $this->view->fecha = new DateTime();
        $this->view->tipo_persona = $tipo_persona;
    }

    public function agregarinformesgaranteAction() {
        $this->_helper->layout->disableLayout();

        if ($this->getRequest()->isPost()) {

            $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id", 0);
            $tipoInforme = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoInforme", $tipo_informe_id);
            $this->view->tipo_informe = $tipoInforme;

            $this->view->comentario = $this->getRequest()->getParam("comentario", 0);

            $this->view->fecha = new DateTime();
        }
    }

    public function cancelarverificacionlaboralAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        if ($this->_hasParam("promesa_id")) {
            $promesa = new Doctrine_Model_Entities_Promesas();
            $promesa = $this->promesasDao->obtenerPorId($this->getRequest()->getParam("promesa_id"));
            $promesa->setPendiente(0);
            if ($this->promesasDao->guardar($promesa)) {
                echo json_encode(array("error" => 0));
            } else {
                echo json_encode(array("error" => 1));
            }
        } else {
            echo json_encode(array("error" => 1));
        }
    }

    public function informescreditoAction() {
        $this->_helper->layout()->setLayout("layout_pagos");

        $mensaje = null;
        $error = null;
        $persona_id = $this->getRequest()->getParam("persona_id", 0);

        $unaPersona = $this->personaDao->obtenerPorId($persona_id);

        if ($this->getRequest()->isPost()) {
            $persona_id = $this->getRequest()->getParam("persona_id");
            $tipo_informe_id = $this->getRequest()->getParam("tipo_informe_id");
            $comentario = $this->getRequest()->getParam("comentario");

            $informe = new Doctrine_Model_Entities_Informe();
            if ($persona_id) {
                $persona = $this->personaDao->obtenerPorId($persona_id);
            }
            if ($tipo_informe_id) {
                $tipoInforme = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoInforme', $tipo_informe_id);
            }
            $informe->setPersona($persona);
            $informe->setTipoInforme($tipoInforme);
            $informe->setComentario($comentario);
            $informe->setFecha(new \DateTime());

            if ($this->informeDao->guardar($informe)) {
                $mensaje = " Informe guardado con exito.";
                $error = false;
            } else {
                $mensaje = "Error al intentar guardar el informe.";
                $error = true;
            }
            $this->view->error = $error;
            $this->view->mensaje = $mensaje;
        }

        $conjInformes = new Doctrine\Common\Collections\ArrayCollection();
        $conjInformes = $this->informeDao->obtenerTodosPorPersona($persona_id);

        $this->view->persona_id = $persona_id;
        $this->view->cliente = $unaPersona;
        $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();
        $this->view->conjInformes = array_reverse($conjInformes);
    }

    public function verificarverazAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $this->informeDao = new Doctrine_Model_InformeDoctrineDao();

        $persona_id = $this->getRequest()->getParam("persona_id");

        $informes = $this->informeDao->obtenerTodosPorPersonaYTipo($persona_id, 1); /* 1 = VERAZ */

        $valor = false;
        $informe = new Doctrine_Model_Entities_Informe();
        $fecha = new DateTime();
        foreach ($informes as $informe) {
            if ($informe->getFecha()->format("d/m/Y") == $fecha->format("d/m/Y")) {
                $valor = true;
            }
        }

        echo json_encode(array("veraz" => $valor));
    }

}
